package com.xbongbong.paas.service;

import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.BaseDTO;
import com.xbongbong.paas.toolbox.wrap.BaseVO;
import com.xbongbong.pro.esign.pojo.dto.EsignCorpRealnameDTO;
import com.xbongbong.pro.esign.pojo.dto.EsignFlowDetailDTO;
import com.xbongbong.pro.esign.pojo.dto.EsignFlowStatusDTO;
import com.xbongbong.pro.esign.pojo.dto.EsignGetSwitchDTO;
import com.xbongbong.pro.esign.pojo.dto.EsignPreCheckDTO;
import com.xbongbong.pro.esign.pojo.dto.EsignSetSwitchDTO;
import com.xbongbong.pro.esign.pojo.dto.HasEsignDTO;
import com.xbongbong.pro.esign.pojo.dto.XbbFileDetailDTO;
import com.xbongbong.pro.esign.pojo.dto.XbbProcessStartDTO;
import com.xbongbong.pro.esign.pojo.dto.XbbSignNoticeUrlDTO;
import com.xbongbong.pro.esign.pojo.vo.EsignContractMarginVO;
import com.xbongbong.pro.esign.pojo.vo.EsignCorpConsoleVO;
import com.xbongbong.pro.esign.pojo.vo.EsignCorpInfoVO;
import com.xbongbong.pro.esign.pojo.vo.EsignCorpRealnameVO;
import com.xbongbong.pro.esign.pojo.vo.EsignFileDetailVO;
import com.xbongbong.pro.esign.pojo.vo.EsignFileUploadVO;
import com.xbongbong.pro.esign.pojo.vo.EsignFlowDetailVO;
import com.xbongbong.pro.esign.pojo.vo.EsignFlowStatusVO;
import com.xbongbong.pro.esign.pojo.vo.EsignGetSwitchVO;
import com.xbongbong.pro.esign.pojo.vo.EsignNoticeUrlVO;
import com.xbongbong.pro.esign.pojo.vo.EsignProcessStartVO;
import com.xbongbong.pro.esign.pojo.vo.HasEsignVO;
import com.xbongbong.pro.esign.pojo.vo.RemindVO;
import com.xbongbong.pro.esign.pojo.vo.EsignPreCheckVO;

public interface EsignService {


    /**
     * 查询企业信息
     * @param corpid
     * @return
     * @throws XbbException
     */
    EsignCorpInfoVO getEsignCorpInfo(String corpid) throws XbbException;

    /**
     * 查询个人信息
     * @param corpid
     * @param userId
     * @return
     * @throws XbbException
     */
    EsignCorpInfoVO getEsignUserInfo(String corpid, String userId) throws XbbException;

    /**
     * 获取跳转到企业实名的地址
     * @param esignCorpRealnameDTO
     * @return
     * @throws XbbException
     */
    EsignCorpRealnameVO getEsignCorpRealname(EsignCorpRealnameDTO esignCorpRealnameDTO) throws XbbException;

    /**
     * 获取跳转到个人实名的地址
     * @param esignCorpRealnameDTO
     * @return
     * @throws XbbException
     */
    EsignCorpRealnameVO getEsignUserRealname(EsignCorpRealnameDTO esignCorpRealnameDTO) throws XbbException;

    /**
     * 设置开关电子合同
     * @param esignSetSwitchDTO
     * @return
     * @throws XbbException
     */
    BaseVO setSwitch(EsignSetSwitchDTO esignSetSwitchDTO) throws XbbException;
    /**
     * 获取开关电子合同
     * @param esignGetSwitchDTO
     * @return
     * @throws XbbException
     */
    EsignGetSwitchVO getSwitch(EsignGetSwitchDTO esignGetSwitchDTO) throws XbbException;
    /**
     * 查询套餐余量
     * @param corpid
     * @return
     * @throws XbbException
     */
    EsignContractMarginVO getEsignContractMargin(String corpid) throws XbbException;
    /**
     * 获取企业控制台地址
     * @param corpid
     * @return
     * @throws XbbException
     */
    EsignCorpConsoleVO getEsignCorpConsole(String corpid) throws XbbException;

    /**
     * 获取签署状态
     * @param esignFlowStatusDTO
     * @return
     * @throws XbbException
     */
    EsignFlowStatusVO getEsignFlowStatus(EsignFlowStatusDTO esignFlowStatusDTO) throws XbbException;

    /**
     * 获取流程任务详情
     * @param esignFlowDetailDTO
     * @return
     * @throws XbbException
     */
    EsignFlowDetailVO getEsignFlowDetail(EsignFlowDetailDTO esignFlowDetailDTO) throws XbbException;

    /**
     * 表单是否有开关
     * @param hasEsignDTO
     * @return
     * @throws XbbException
     */
    HasEsignVO hasEsign(HasEsignDTO hasEsignDTO) throws XbbException;

    /**
     * 获取文件详情
     * @param xbbFileDetailDTO
     * @return
     * @throws XbbException
     */
    EsignFileDetailVO getEsignFileDetail(XbbFileDetailDTO xbbFileDetailDTO) throws XbbException;

    /**
     * 实名校验
     * @param baseDTO
     * @return
     * @throws XbbException
     */
    EsignPreCheckVO checkRealname(BaseDTO baseDTO) throws XbbException;

    /**
     * 前置校验
     * @param esignPreCheckDTO
     * @return
     * @throws XbbException
     */
    EsignPreCheckVO preCheck(EsignPreCheckDTO esignPreCheckDTO) throws XbbException;

    /**
     * 获取发起签署任务地址
     * @param xbbProcessStartDTO
     * @return
     * @throws XbbException
     */
    EsignProcessStartVO getEsignProcessStart(XbbProcessStartDTO xbbProcessStartDTO) throws XbbException;

    /**
     * 获取签署人签署地址
     * @param xbbSignNoticeUrlDTO
     * @return
     * @throws XbbException
     */
    EsignNoticeUrlVO signNoticeUrl(XbbSignNoticeUrlDTO xbbSignNoticeUrlDTO) throws XbbException;

    /**
     * 提醒
     * @param baseDTO
     * @return
     * @throws XbbException
     */
    RemindVO remind(BaseDTO baseDTO) throws XbbException;
}
